package com.atguigu.bigdata.scala.mytest.chapter06

class Test8{
  var a=3;
  println("伴生类")
  start()
  def start(): Unit = {
    println("11")
  }
}
object Test8 {
  println("半生对象")
  def main(args: Array[String]): Unit = {
//    val user = new User("qqq")
    //    111
    //    222
    //    ageA=12
    //    333
    //    444
    //    nameA=qqq

    //先初始化半生对象,在初始化伴生类,初始化就是为属性赋值,不执行方法,但执行方法的调用
    val test = new Test8
    println(test.a)
  }

  class Person() {
    var ageA:Int=10
    println("111")
    def this(age:Int){
      //调用主构造函数Person()初始化,初始化时不调用辅助构造函数,所以打印111,222
      this()
      ageA=age
      //初始化完成继续执行这里
      println("ageA="+ageA)
    }
    println("222")
  }

  //子类初始化前必须初始化父类,这里用def this(age:Int)来初始化父类
  class User() extends Person(12) {
    var nameA:String="nameA"
    println("333")
    //这里不能用this(),因为this()表示主构造方法,这里定义的是辅助构造方法
    def this(name:String){
      this()
      //调用主构造函数User()
      nameA=name
      println("nameA="+nameA)
    }
    println("444")

  }
}
